package com.example.java.newFeature.function;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

// Java中的函数式接口（Functional Interface）是只有一个抽象方法的接口，这种接口特别适合与Lambda表达式配合使用，
// 因为Lambda表达式本质上就是一个简洁的匿名函数实现。Java 8引入了@FunctionalInterface注解，
// 虽然这个注解不是必需的，但它可以帮助编译器检查代码，确保被标注的接口确实只有一个抽象方法。
public class FunctionDemo {
    public static void main(String[] args) {
        // 使用Lambda表达式实现自定义函数式接口
        MyFunctionalInterface myFunc = () -> System.out.println("Doing something!");
        // 调用接口方法，doSomething 就是上面的Lambda表达式内容
        myFunc.doSomething();


        // 使用Java内置的函数式接口
        // 使用Lambda表达式实现 Supplier 生产函数式接口
        Supplier<String> supplier = () -> "Supplier Hello, Supplier!";
        // 调用get方法
        String result = supplier.get();
        System.out.println(result);

        // 使用Lambda表达式实现 Consumer 消费函数式接口
        Consumer<String> consumer = System.out::println;
        // 调用accept方法消费数据
        consumer.accept("Consumer Hello, World!");

        // 使用Lambda表达式实现 Function 转换函数式接口
        Function<Integer, String> function = (num) -> "Number: " + num;
        // 调用apply方法
        String result2 = function.apply(10);
        System.out.println("Function Result: " + result2);

        // 使用Lambda表达式实现 Predicate 断言函数式接口
        Predicate<Integer> predicate = (num) -> num > 0;
        // 调用test方法
        boolean isPositive = predicate.test(10);
        System.out.println("Predicate Is 10 positive? " + isPositive);
    }
}
